home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-07-15 | 1.8 KB | 82 lines | [TEXT/MPS ] |
- #include <stdio.h>
- #include <files.h>
- #include <String.h>
- #include <Strings.h>
- #include <Memory.h>
- #include <Errors.h>
-
- OSErr ParseFullPathname (FSSpec *Result, char *PathNamePtr);
- Boolean GetElement (StringPtr Result,char * PathNamePtr,short ElementNumber);
-
- main (int argc,char ** argv)
- {
- OSErr err;
- FSSpec here;
-
- if (argc != 2)
- printf ("form: pfpn <pathname>\n");
-
- err = ParseFullPathname (&here, argv[1]);
- if (err)
- printf ("Died of error %d\n",err);
- else
- printf ("vRefNum %d DirID %d name %P\n",here.vRefNum, here.parID,here.name);
- }
-
- Boolean GetElement (StringPtr Result,char *PathNamePtr,short ElementNumber)
- {
- char *eStart, *eEnd;
-
- eStart = eEnd = PathNamePtr;
-
- while (*eEnd && ElementNumber) {
- if (*eEnd == ':') {
- --ElementNumber;
- if (ElementNumber == 1)
- eStart = eEnd + 1;
- }
- ++eEnd;
- }
-
- if (ElementNumber || (eEnd - eStart > 32) || (eEnd - eStart == 0))
- return false;
-
- BlockMove ((Ptr) eStart, (Ptr) (Result + 1),
- *Result = (char)eEnd - eStart);
-
- return true;
- }
-
-
- OSErr ParseFullPathname (FSSpec *Result,char *PathNamePtr)
- {
- OSErr err;
- short level = 2;
- CInfoPBRec dInfo;
- HParamBlockRec vInfo;
-
- Result->parID = fsRtDirID;
-
- if (GetElement ((StringPtr) &Result->name, PathNamePtr, 1)) {
- vInfo.volumeParam.ioVRefNum = 0;
- vInfo.volumeParam.ioNamePtr = &Result->name;
- vInfo.volumeParam.ioVolIndex = -1;
- err = PBHGetVInfo (&vInfo,false);
- if (err) return err;
- Result->vRefNum = vInfo.volumeParam.ioVRefNum;
- }
-
- while (GetElement ((StringPtr) &Result->name, PathNamePtr, level)) {
- --*(Result->name);
- dInfo.dirInfo.ioFDirIndex = 0;
- dInfo.dirInfo.ioDrDirID = Result->parID;
- dInfo.dirInfo.ioVRefNum = Result->vRefNum;
- dInfo.dirInfo.ioNamePtr = &Result->name;
- err = PBGetCatInfo (&dInfo,false);
- if (err) return err;
- Result->parID = dInfo.dirInfo.ioDrDirID;
- ++level;
- }
- return noErr;
- }
-